package com.micromall.common.utils;


import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.UUID;

/**
 * Created by wanghongyue on 2017/4/20.
 */
public class DateUtils {

    public static String GENERAL_24HOUR_PATTERN = "yyyy-MM-dd HH:mm:ss";

    private static SimpleDateFormat sdf = null;

    /**
     *
     * genUUID:生成UUID,作为大多数实体的id. <br/>
     * TODO(这里描述这个方法适用条件 – 可选).<br/>
     * TODO(这里描述这个方法的执行流程 – 可选).<br/>
     * TODO(这里描述这个方法的使用方法 – 可选).<br/>
     * TODO(这里描述这个方法的注意事项 – 可选).<br/>
     *
     * @author Dante Fung
     * @return
     * @since JDK 1.7
     */
    public static String genUUID()
    {
        return UUID.randomUUID().toString().replace("-","");
    }

    /**
     *
     * genMkDate:生成一定格式的日期字符串. <br/>
     *<p> 支持格式为 yyyy.MM.dd G 'at' hh:mm:ss z 如 '2016-1-1 AD at 22:10:59 PSD'<br>
     * yy/MM/dd HH:mm:ss 如 '2016/1/1 17:55:00'<br>
     * yy/MM/dd HH:mm:ss pm 如 '2016/1/1 17:55:00 pm'<br>
     * yy-MM-dd HH:mm:ss 如 '2016-1-1 17:55:00' <br>
     * yy-MM-dd HH:mm:ss am 如 '2016-1-1 17:55:00 am'</p> <br>
     * @author Dante Fung
     * @param pattern
     * @return
     * @since JDK 1.7
     */
    public static String genMkDate(String pattern)
    {
        if(sdf==null)
        {
            sdf = new SimpleDateFormat(pattern);
        }

        if(!pattern.trim().equals(sdf.toPattern())){
            sdf = new SimpleDateFormat(pattern);
        }

        return sdf.format(new Date());
    }

    /**
     *
     * genMkDate:生成一定格式的日期字符串. <br/>
     *<p> 支持格式为 yyyy.MM.dd G 'at' hh:mm:ss z 如 '2016-1-1 AD at 22:10:59 PSD'<br>
     * yy/MM/dd HH:mm:ss 如 '2016/1/1 17:55:00'<br>
     * yy/MM/dd HH:mm:ss pm 如 '2016/1/1 17:55:00 pm'<br>
     * yy-MM-dd HH:mm:ss 如 '2016-1-1 17:55:00' <br>
     * yy-MM-dd HH:mm:ss am 如 '2016-1-1 17:55:00 am'</p> <br>
     *
     * @author Dante Fung
     * @param pattern
     * @return
     * @since JDK 1.7
     */
    public static String genMkDate(String pattern, Date date)
    {
        if(sdf==null)
        {
            sdf = new SimpleDateFormat(pattern);
        }

        if(!pattern.trim().equals(sdf.toPattern())){
            sdf = new SimpleDateFormat(pattern);
        }

        return sdf.format(date);
    }

    /**
     *
     * string2Date:将字符串时间转成java.util.Date. <br/>
     * TODO(这里描述这个方法适用条件 – 可选).<br/>
     * TODO(这里描述这个方法的执行流程 – 可选).<br/>
     * TODO(这里描述这个方法的使用方法 – 可选).<br/>
     * TODO(这里描述这个方法的注意事项 – 可选).<br/>
     *
     * @author Dante Fung
     * @param pattern
     * @param dateStr
     * @return
     * @throws ParseException
     * @since JDK 1.7
     */
    public static Date string2Date(String pattern, String dateStr) throws ParseException {
        if(sdf==null)
        {
            sdf = new SimpleDateFormat(pattern);
        }

        if(!pattern.trim().equals(sdf.toPattern())){
            sdf = new SimpleDateFormat(pattern);
        }

        return sdf.parse(dateStr);
    }

    /**
     *
     * createDate:创建时间. <br/>
     * TODO(这里描述这个方法适用条件 – 可选).<br/>
     * TODO(这里描述这个方法的执行流程 – 可选).<br/>
     * TODO(这里描述这个方法的使用方法 – 可选).<br/>
     * TODO(这里描述这个方法的注意事项 – 可选).<br/>
     *
     * @author Dante Fung
     * @param year
     * @param month
     * @param day
     * @param hour
     * @param minute
     * @param second
     * @return
     * @since JDK 1.6
     */
    public static Date createDate(int year, int month, int day, int hour, int minute, int second) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR, year);
        calendar.set(Calendar.MONTH, month-1);
        calendar.set(Calendar.DAY_OF_MONTH, day);
        calendar.set(Calendar.HOUR_OF_DAY, hour);
        calendar.set(Calendar.MINUTE, minute);
        calendar.set(Calendar.SECOND, second);
        return calendar.getTime();
    }
}
